#pragma once
#include "common.h"

class BaseCipher
{
private:
	int BlockSize ;
	int Round ;
	int SboxSize ;
	key_t InitialKey ;
	plaintext_t Plaintext ;
	virtual void KeySchedule() ;
	virtual void OneRound() ;
	virtual void InvOneRound() ;

public:	
	ciphertext_t Ciphertext ;
	BaseCipher( const int BlockSize , const int Round , const int SboxSize , const key_t InitialKey , const plaintext_t Plaintext ) ;
	virtual ~BaseCipher(void);
	void get_CipherInfo( int& blocksize , int& round , int& sboxsize , key_t& initialkey , plaintext_t& Plaintext ) ;
	virtual void Encryption() ;
	virtual void Decryption() ;
};
